library(tidyverse)
library(here)
library(readxl)
Warning: package ‘readxl’ was built under R version 4.2.3
library(janitor)
armor <- clean_names(read_xlsx(here("raw_data/armour.xlsx")))
Error in exists(cacheKey, where = .rs.WorkingDataEnv, inherits = FALSE) : 
  invalid first argument
Error in assign(cacheKey, frame, .rs.CachedDataEnv) : 
  attempt to use zero-length variable name
sets <- clean_names(read_xlsx(here("raw_data/armour.xlsx"), sheet = 2))
all_items <- clean_names(read_xlsx(here("raw_data/all_crafting.xlsx")))
sets
cleaned_armor <- all_items %>% 
  mutate(across(where(is.character), ~ str_to_lower(.x))) %>% 
  select(-c(description, set_bonus)) %>% 
  right_join(armor, by = join_by(item, upgrade_level)) %>% 
  left_join(sets) %>% 
  group_by(item, type, crafting_station_level, crafting_station, upgrade_level,
           armor, resistant, weak, set, weight, speed, other, bonus) %>% 
  summarise(materials = toString(unique(material)),
            material_amounts = toString(amount_of_material)) %>% 
  pivot_wider(names_from = crafting_station, values_from = crafting_station_level) %>% 
  clean_names()
Joining with `by = join_by(set)``summarise()` has grouped output by 'item', 'type', 'crafting_station_level', 'crafting_station', 'upgrade_level', 'armor', 'resistant', 'weak', 'set', 'weight', 'speed', 'other'. You can override using the `.groups` argument.
armour %>% 
  filter(upgrade_level == 1) %>% 
  select(item, armor, weight)
types <- all_items %>% 
  select(item, type) %>% 
  filter(type != "upgrade") %>% 
  distinct()

armour_type <- armour %>% 
  left_join(types)
armour_type %>% 
  filter(type == "cape" & upgrade_level == 1) %>% 
  select(item, armor, weight, speed, resistant, weak)
armor <- read_csv(here("clean_data/armor_data.csv"))
armor %>% 
  rename("upgrade_level" = "Upgrade Level") %>% 
  filter(Type == "Chest" & upgrade_level == 1) %>% 
  select(Item, Armor, Weight, Speed, Resistant, Weak)
names(armor)
armor <- armor %>% 
  clean_names() %>% 
  mutate(across(where(is.character), ~ str_to_lower(.x)))

crafting_armor <- all_items %>% 
  semi_join(armor, join_by(item)) %>% 
  mutate(across(where(is.character), ~ str_to_lower(.x)))
crafting_armor %>% 
  pivot_wider(names_from = crafting_station, values_from = crafting_station_level) %>% 
  clean_names() %>% 
  filter(is.na(workbench) | workbench <= 6) %>% 
  filter(is.na(forge) | forge <= 7) %>%
  filter(is.na(galdr_table) | galdr_table <= 0) %>%
  filter(is.na(black_forge) | black_forge <= 0)
chest_list <- cleaned_armor %>% 
  filter(type == "chest") %>% 
  select(item) %>% 
  pull()
Adding missing grouping variables: `type`, `upgrade_level`, `armor`, `resistant`, `weak`, `set`, `weight`, `speed`, `other`
p <- armor_list %>% 
  filter(item %in% chest_list) %>%
  group_by(item) %>% 
  filter(upgrade_level == max(upgrade_level)) %>% 
  arrange(desc(armor)) %>% 
  head(5) %>% 
  select(item, upgrade_level, armor, weight) %>%

  pivot_longer(c(armor, weight), names_to = "stat", values_to = "value") %>% 
  mutate(item = str_to_title(item),
         stat = str_to_title(stat)) %>%
  unite("item", item:upgrade_level, sep = " - Level ",  remove = TRUE) %>% 
  ggplot(aes(item, value, fill = stat)) +
  geom_col(position = "dodge") +
  theme_classic() +
  theme(text = element_text(colour = "black"),
        axis.text = element_text(colour = "black"),
        legend.background = element_rect(fill = "transparent"),
        panel.background = element_rect(fill = "transparent"),
        panel.border = element_rect(fill = "transparent",
                                    colour = "transparent"),
        plot.background = element_rect(fill = "transparent",
                                       colour = NA),
        axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(
    x = "Chest",
    y = "Stat",
    fill = ""
  ) 
ggplotly(p)
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoZXJlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGphbml0b3IpDQpgYGANCg0KYGBge3J9DQphcm1vciA8LSBjbGVhbl9uYW1lcyhyZWFkX3hsc3goaGVyZSgicmF3X2RhdGEvYXJtb3VyLnhsc3giKSkpDQpzZXRzIDwtIGNsZWFuX25hbWVzKHJlYWRfeGxzeChoZXJlKCJyYXdfZGF0YS9hcm1vdXIueGxzeCIpLCBzaGVldCA9IDIpKQ0KYWxsX2l0ZW1zIDwtIGNsZWFuX25hbWVzKHJlYWRfeGxzeChoZXJlKCJyYXdfZGF0YS9hbGxfY3JhZnRpbmcueGxzeCIpKSkNCmBgYA0KDQpgYGB7cn0NCnNldHMNCmBgYA0KDQpgYGB7cn0NCmNsZWFuZWRfYXJtb3IgPC0gYWxsX2l0ZW1zICU+JSANCiAgbXV0YXRlKGFjcm9zcyh3aGVyZShpcy5jaGFyYWN0ZXIpLCB+IHN0cl90b19sb3dlcigueCkpKSAlPiUgDQogIHNlbGVjdCgtYyhkZXNjcmlwdGlvbiwgc2V0X2JvbnVzKSkgJT4lIA0KICByaWdodF9qb2luKGFybW9yLCBieSA9IGpvaW5fYnkoaXRlbSwgdXBncmFkZV9sZXZlbCkpICU+JSANCiAgbGVmdF9qb2luKHNldHMpICU+JSANCiAgZ3JvdXBfYnkoaXRlbSwgdHlwZSwgY3JhZnRpbmdfc3RhdGlvbl9sZXZlbCwgY3JhZnRpbmdfc3RhdGlvbiwgdXBncmFkZV9sZXZlbCwNCiAgICAgICAgICAgYXJtb3IsIHJlc2lzdGFudCwgd2Vhaywgc2V0LCB3ZWlnaHQsIHNwZWVkLCBvdGhlciwgYm9udXMpICU+JSANCiAgc3VtbWFyaXNlKG1hdGVyaWFscyA9IHRvU3RyaW5nKHVuaXF1ZShtYXRlcmlhbCkpLA0KICAgICAgICAgICAgbWF0ZXJpYWxfYW1vdW50cyA9IHRvU3RyaW5nKGFtb3VudF9vZl9tYXRlcmlhbCkpICU+JSANCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNyYWZ0aW5nX3N0YXRpb24sIHZhbHVlc19mcm9tID0gY3JhZnRpbmdfc3RhdGlvbl9sZXZlbCkgJT4lIA0KICBjbGVhbl9uYW1lcygpDQpgYGANCmBgYHtyfQ0KY2xlYW5lZF9hcm1vciAlPiUgDQogIGZpbHRlcih0eXBlID09ICJjYXBlIiAmIHVwZ3JhZGVfbGV2ZWwgPT0gMSkNCmBgYA0KDQoNCg0KYGBge3J9DQphcm1vdXIgJT4lIA0KICBmaWx0ZXIodXBncmFkZV9sZXZlbCA9PSAxKSAlPiUgDQogIHNlbGVjdChpdGVtLCBhcm1vciwgd2VpZ2h0KQ0KYGBgDQoNCmBgYHtyfQ0KdHlwZXMgPC0gYWxsX2l0ZW1zICU+JSANCiAgc2VsZWN0KGl0ZW0sIHR5cGUpICU+JSANCiAgZmlsdGVyKHR5cGUgIT0gInVwZ3JhZGUiKSAlPiUgDQogIGRpc3RpbmN0KCkNCg0KYXJtb3VyX3R5cGUgPC0gYXJtb3VyICU+JSANCiAgbGVmdF9qb2luKHR5cGVzKQ0KYGBgDQpgYGB7cn0NCmFybW91cl90eXBlICU+JSANCiAgZmlsdGVyKHR5cGUgPT0gImNhcGUiICYgdXBncmFkZV9sZXZlbCA9PSAxKSAlPiUgDQogIHNlbGVjdChpdGVtLCBhcm1vciwgd2VpZ2h0LCBzcGVlZCwgcmVzaXN0YW50LCB3ZWFrKQ0KYGBgDQoNCmBgYHtyfQ0KYXJtb3IgPC0gcmVhZF9jc3YoaGVyZSgiY2xlYW5fZGF0YS9hcm1vcl9kYXRhLmNzdiIpKQ0KYGBgDQpgYGB7cn0NCmFybW9yICU+JSANCiAgcmVuYW1lKCJ1cGdyYWRlX2xldmVsIiA9ICJVcGdyYWRlIExldmVsIikgJT4lIA0KICBmaWx0ZXIoVHlwZSA9PSAiQ2hlc3QiICYgdXBncmFkZV9sZXZlbCA9PSAxKSAlPiUgDQogIHNlbGVjdChJdGVtLCBBcm1vciwgV2VpZ2h0LCBTcGVlZCwgUmVzaXN0YW50LCBXZWFrKQ0KYGBgDQpgYGB7cn0NCm5hbWVzKGFybW9yKQ0KYGBgDQoNCmBgYHtyfQ0KYXJtb3IgPC0gYXJtb3IgJT4lIA0KICBjbGVhbl9uYW1lcygpICU+JSANCiAgbXV0YXRlKGFjcm9zcyh3aGVyZShpcy5jaGFyYWN0ZXIpLCB+IHN0cl90b19sb3dlcigueCkpKQ0KDQpjcmFmdGluZ19hcm1vciA8LSBhbGxfaXRlbXMgJT4lIA0KICBzZW1pX2pvaW4oYXJtb3IsIGpvaW5fYnkoaXRlbSkpICU+JSANCiAgbXV0YXRlKGFjcm9zcyh3aGVyZShpcy5jaGFyYWN0ZXIpLCB+IHN0cl90b19sb3dlcigueCkpKQ0KYGBgDQoNCmBgYHtyfQ0KY3JhZnRpbmdfYXJtb3IgJT4lIA0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gY3JhZnRpbmdfc3RhdGlvbiwgdmFsdWVzX2Zyb20gPSBjcmFmdGluZ19zdGF0aW9uX2xldmVsKSAlPiUgDQogIGNsZWFuX25hbWVzKCkgJT4lIA0KICBmaWx0ZXIoaXMubmEod29ya2JlbmNoKSB8IHdvcmtiZW5jaCA8PSA2KSAlPiUgDQogIGZpbHRlcihpcy5uYShmb3JnZSkgfCBmb3JnZSA8PSA3KSAlPiUNCiAgZmlsdGVyKGlzLm5hKGdhbGRyX3RhYmxlKSB8IGdhbGRyX3RhYmxlIDw9IDApICU+JQ0KICBmaWx0ZXIoaXMubmEoYmxhY2tfZm9yZ2UpIHwgYmxhY2tfZm9yZ2UgPD0gMCkNCmBgYA0KDQpgYGB7cn0NCmFybW9yX2xpc3QgPC0gY2xlYW5lZF9hcm1vciAlPiUgDQogIGZpbHRlcihpcy5uYSh3b3JrYmVuY2gpIHwgd29ya2JlbmNoIDw9IDQpICU+JSANCiAgZmlsdGVyKGlzLm5hKGZvcmdlKSB8IGZvcmdlIDw9IDIpICU+JQ0KICBmaWx0ZXIoaXMubmEoZ2FsZHJfdGFibGUpIHwgZ2FsZHJfdGFibGUgPD0gMikgJT4lDQogIGZpbHRlcihpcy5uYShibGFja19mb3JnZSkgfCBibGFja19mb3JnZSA8PSAyKQ0KYGBgDQpgYGB7cn0NCmNoZXN0X2xpc3QgPC0gY2xlYW5lZF9hcm1vciAlPiUgDQogIGZpbHRlcih0eXBlID09ICJjaGVzdCIpICU+JSANCiAgc2VsZWN0KGl0ZW0pICU+JSANCiAgcHVsbCgpDQpgYGANCg0KYGBge3J9DQpwIDwtIGFybW9yX2xpc3QgJT4lIA0KICBmaWx0ZXIoaXRlbSAlaW4lIGNoZXN0X2xpc3QpICU+JQ0KICBncm91cF9ieShpdGVtKSAlPiUgDQogIGZpbHRlcih1cGdyYWRlX2xldmVsID09IG1heCh1cGdyYWRlX2xldmVsKSkgJT4lIA0KICBhcnJhbmdlKGRlc2MoYXJtb3IpKSAlPiUgDQogIGhlYWQoNSkgJT4lIA0KICBzZWxlY3QoaXRlbSwgdXBncmFkZV9sZXZlbCwgYXJtb3IsIHdlaWdodCkgJT4lDQogIHBpdm90X2xvbmdlcihjKGFybW9yLCB3ZWlnaHQpLCBuYW1lc190byA9ICJzdGF0IiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lIA0KICBtdXRhdGUoaXRlbSA9IHN0cl90b190aXRsZShpdGVtKSwNCiAgICAgICAgIHN0YXQgPSBzdHJfdG9fdGl0bGUoc3RhdCkpICU+JQ0KICB1bml0ZSgiaXRlbSIsIGl0ZW06dXBncmFkZV9sZXZlbCwgc2VwID0gIiAtIExldmVsICIsICByZW1vdmUgPSBUUlVFKSAlPiUgDQogIGdncGxvdChhZXMoaXRlbSwgdmFsdWUsIGZpbGwgPSBzdGF0KSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiYmxhY2siKSwNCiAgICAgICAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICJibGFjayIpLA0KICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50IiksDQogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ0cmFuc3BhcmVudCIpLA0KICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ0cmFuc3BhcmVudCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSAidHJhbnNwYXJlbnQiKSwNCiAgICAgICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAidHJhbnNwYXJlbnQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3VyID0gTkEpLA0KICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKSArDQogIGxhYnMoDQogICAgeCA9ICJDaGVzdCIsDQogICAgeSA9ICJTdGF0IiwNCiAgICBmaWxsID0gIiINCiAgKSANCmdncGxvdGx5KHApDQpgYGANCg0KYGBge3J9DQphcm1vcl9saXN0ICU+JSANCiAgZmlsdGVyKGl0ZW0gPT0gImZlbnJpcyBjb2F0IiB8IGl0ZW0gPT0gImZlbnJpcyBsZWdnaW5ncyIgfA0KICAgICAgICAgICBpdGVtID09ICJmZW5yaXMgaG9vZCIgfCBpdGVtID09ICJ3b2xmIGZ1ciBjYXBlIikgJT4lDQogIGdyb3VwX2J5KGl0ZW0pICU+JSANCiAgZmlsdGVyKHVwZ3JhZGVfbGV2ZWwgPT0gbWF4KHVwZ3JhZGVfbGV2ZWwpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIHNlbGVjdChpdGVtLCB1cGdyYWRlX2xldmVsLCBhcm1vciwgd2VpZ2h0LCBzcGVlZCwgcmVzaXN0YW50LCB3ZWFrLCBzZXQpICU+JSANCiAgbXV0YXRlKHNwZWVkID0gY29hbGVzY2Uoc3BlZWQsIDApKSAlPiUgDQogIG11dGF0ZShzcGVlZCA9IHNwZWVkICogMTAwKSAlPiUgDQogIGJpbmRfcm93cyhzdW1tYXJpc2UoLiwgYWNyb3NzKHdoZXJlKGlzLm51bWVyaWMpLCBzdW0pLA0KICAgICAgICAgICAgICAgICAgICAgIGFjcm9zcyh3aGVyZShpcy5jaGFyYWN0ZXIpLCB+IiIpKQ0KICAgICAgICAgICAgKSAlPiUgDQogIG11dGF0ZShhY3Jvc3Mod2hlcmUoaXMuY2hhcmFjdGVyKSwgc3RyX3RvX3RpdGxlKSkgJT4lIA0KICBtdXRhdGUoaXRlbSA9IGNhc2Vfd2hlbihpdGVtID09ICIiIH4gIlRvdGFsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgLmRlZmF1bHQgPSBpdGVtKSkgJT4lIA0KICByZW5hbWVfYWxsKHN0cmluZ3I6OnN0cl90b190aXRsZSkNCiAgDQpgYGANCiAgDQogIA==